import { Rule, RuleType } from "@midwayjs/validate";
import { CarInfoEntity } from "../../transport/entity/car/info";
import { ProviderInfoEntity } from "../../provider/entity/info";
import { CoolCommException } from "@cool-midway/core";

// 运力信息
export class TransportCapacityDTO {
    // 运力类型
    type: '车辆' | '服务人员';
    // 运力ID，用于查询运力信息
    capacityId: number;
    // 运力信息
    data: CarInfoEntity | ProviderInfoEntity;
}

// 客服下单 - 服务订单 - 子订单
export class SupportServiceSubOrderDTO {
    capacity: TransportCapacityDTO;
}

// 客服下单 - 服务订单 - 主订单
export class SupportServiceOrderDTO {
    // 子订单列表
    subOrders: SupportServiceSubOrderDTO[];
}


// 客服下单 - 商品订单
export class SupportGoodsOrderDTO {


}



// 用户下单 - 服务订单
export class CreateOrderDTO {

    @Rule(RuleType.number().required().error(new CoolCommException('产品项ID不能为空')))
    productItemId: number;
    @Rule(RuleType.string().optional())
    remark?: string;

    @Rule(RuleType.date().optional())
    useDate?: Date

    @Rule(RuleType.object()?.schema({
        name: RuleType.string().required(),
        phone: RuleType.string().required(),
        address: RuleType.string().required(),
    }).required().error(new CoolCommException('请选择联系人')))
    contactInfo: {
        name: string;
        phone: string;
        address: string;
    }
}

export class ProviderManualOrderItemDTO {
    @Rule(RuleType.string().required().max(255).error(new CoolCommException('请输入子订单标题')))
    title: string;

    @Rule(RuleType.number().positive().required().error(new CoolCommException('请输入子订单单价')))
    unitPrice: number;

    @Rule(RuleType.number().integer().min(1).default(1).error(new CoolCommException('子订单数量至少为1')))
    quantity: number;

    @Rule(RuleType.number().positive().optional().error(new CoolCommException('子订单金额不合法')))
    amount?: number;

    @Rule(RuleType.number().optional().error(new CoolCommException('产品ID不合法')))
    productId?: number;

    @Rule(RuleType.number().optional().error(new CoolCommException('产品项ID不合法')))
    productItemId?: number;

    @Rule(RuleType.string().max(50).optional().allow('').error(new CoolCommException('使用时间不合法')))
    useTime?: string;

    @Rule(RuleType.string().max(255).optional().allow('').error(new CoolCommException('出发地不合法')))
    startPlace?: string;

    @Rule(RuleType.string().max(255).optional().allow('').error(new CoolCommException('目的地不合法')))
    endPlace?: string;

    @Rule(RuleType.object().optional())
    extra?: any;
}

export class ProviderManualOrderDTO {
    @Rule(RuleType.number().required().error(new CoolCommException('用户ID不能为空')))
    userId: number;

    @Rule(RuleType.string().required().max(20).error(new CoolCommException('请选择订单类型')))
    type: string;

    @Rule(RuleType.number().valid(0, 1, 2, 3, 4).required().error(new CoolCommException('订单状态不合法')))
    status: number;

    @Rule(RuleType.number().positive().optional().error(new CoolCommException('订单金额不合法')))
    orderAmount?: number;

    @Rule(RuleType.string().max(500).optional().allow('').error(new CoolCommException('订单备注过长')))
    remark?: string;

    @Rule(RuleType.string().max(255).optional().allow('').error(new CoolCommException('订单封面不合法')))
    cover?: string;

    @Rule(RuleType.array()
        .min(1)
        .required()
        .error(new CoolCommException('请至少配置一个子订单')))
    items: any[];
}